package br.com.furb.trabalhoFinal.model;

import br.com.furb.trabalhoFinal.Exceptions.LancamentoException;
import java.io.Serializable;

public class Lancamento implements Serializable {

    private int codigo;
    private String descricao;
    private boolean debito;
    private double valor;

    public Lancamento(int codigo, String descricao, boolean debito, double valor) throws LancamentoException {
        super();
        setCodigo(codigo);
        setDescricao(descricao);
        this.debito = debito;
        setValor(valor);
    }
    
    public Lancamento() {
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) throws LancamentoException {
        if (codigo < 0) {
            throw new LancamentoException("Código do lançamento inválido");
        }
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) throws LancamentoException {
        if (descricao == null || descricao.isEmpty()) {
            throw new LancamentoException("Descrição do lançamento inválido");
        }
        this.descricao = descricao;
    }

    public boolean getDebito() {
        return debito;
    }

    public void setDebito(boolean debito) {
        this.debito = debito;
    }

    public double getValor() {
        return valor;
    }

    public void setValor(double valor) throws LancamentoException {
        if (valor < 0) {
            throw new LancamentoException("Valor do lançamento não pode ser menor do que zero");
        }
        this.valor = valor;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof Lancamento)) {
            return false;
        }
        Lancamento other = (Lancamento) obj;
        return getCodigo() == other.getCodigo() && getDescricao().equals(other.getDescricao()) && getDebito() == other.getDebito();
    }
}
